<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    /* var list = [1,2,3,[4,5,6]];
    var arr = [];
    for(var i=0;i<list.length;i++){
        var item = list[i];  // 1,2,3,[4,5,6]
        if(Array.isArray(item)){

            var brr = [];   // [4,5,6]
            for(var j = 0;j<item.length;j++){
                var item_1 = item[j];
                if(Array.isArray(item_1)){

                }else{
                    brr.push(item_1);
                }
            }

            arr.push(brr);  // 深拷贝
            // arr = arr.concat(brr);  // 数组拉平
 

        }else{ // item 非数组
            arr.push(item);  // arr => [1,2,3]
        }
    }

    console.log(arr); */



    // var list = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];


    // function myFlat(list, n) {
    //     n = n == undefined ? 1 : n;  // 给n设置默认值(1)
    //     var arr = [];
    //     for (var i = 0; i < list.length; i++) {
    //         var item = list[i];
    //         if (Array.isArray(item)) {
    //             var newArr = myFlat(item,n-1);

    //             if(n <= 0) {  // 此时n<=0 => 拉平次数已经够了,不拉平了 => 转去深复制(原样放入)
    //                 arr.push(newArr); 
    //             }else{
    //                 // arr.push(newArr); // 深拷贝
    //                 arr = arr.concat(newArr); // 拉平
    //             }

    //         } else { // item 非数组
    //             arr.push(item);
    //         }
    //     }
    //     return arr;
    // }

    // // debugger;

    // var result = myFlat(list,2);
    // console.log(result);




    var list = [1, 2, 3, [4, 5, 6, [7, 8, 9,[10,[11,[12]]]]]];


    function myFlat(list, n ) {
        n = n == undefined ? 1 : n;  // 给n设置默认值(1)
        var arr = [];
        for (var i = 0; i < list.length; i++) {
            var item = list[i];
            if (Array.isArray(item)) {
                var newArr = myFlat(item, n - 1);

                if (n != Infinity) {
                    if (n <= 0) {  // 此时n<=0 => 拉平次数已经够了,不拉平了 => 转去深复制(原样放入)
                        arr.push(newArr);
                    } else {
                        // arr.push(newArr); // 深拷贝
                        arr = arr.concat(newArr); // 拉平
                    }
                }else{ // n == Infinity
                    arr = arr.concat(newArr); // 拉平
                }

            } else { // item 非数组
                arr.push(item);
            }
        }
        return arr;
    }

    // debugger;

    var result = myFlat(list, 2);
    console.log(result);



    var result = myFlat(list, Infinity);
    console.log(result);




</script>

</html>